package com.tc.have_a_tired.config;

import com.tc.have_a_tired.util.Constants;

import java.util.prefs.Preferences;

/**
 * 配置管理类
 * 负责配置的保存和读取
 */
public class ConfigManager {

    private static final Preferences prefs = Preferences.userNodeForPackage(ConfigManager.class);

    /**
     * 获取提醒间隔（分钟）
     */
    public static int getReminderInterval() {
        return prefs.getInt(Constants.CONFIG_KEY_REMINDER_INTERVAL, Constants.DEFAULT_REMINDER_INTERVAL);
    }

    /**
     * 保存提醒间隔（分钟）
     */
    public static void setReminderInterval(int minutes) {
        if (minutes >= Constants.MIN_REMINDER_INTERVAL && minutes <= Constants.MAX_REMINDER_INTERVAL) {
            prefs.putInt(Constants.CONFIG_KEY_REMINDER_INTERVAL, minutes);
        }
    }

    /**
     * 获取休息时长（分钟）
     */
    public static int getRestDuration() {
        return prefs.getInt(Constants.CONFIG_KEY_REST_DURATION, Constants.DEFAULT_REST_DURATION);
    }

    /**
     * 保存休息时长（分钟）
     */
    public static void setRestDuration(int minutes) {
        if (minutes >= Constants.MIN_REST_DURATION && minutes <= Constants.MAX_REST_DURATION) {
            prefs.putInt(Constants.CONFIG_KEY_REST_DURATION, minutes);
        }
    }

    /**
     * 获取自定义提示语
     */
    public static String getCustomMessage() {
        return prefs.get(Constants.CONFIG_KEY_CUSTOM_MESSAGE, "");
    }

    /**
     * 保存自定义提示语
     */
    public static void setCustomMessage(String message) {
        if (message != null && message.length() <= Constants.MAX_MESSAGE_LENGTH) {
            prefs.put(Constants.CONFIG_KEY_CUSTOM_MESSAGE, message);
        }
    }

    /**
     * 是否使用自定义提示语
     */
    public static boolean isUseCustomMessage() {
        return prefs.getBoolean(Constants.CONFIG_KEY_USE_CUSTOM_MESSAGE, false);
    }

    /**
     * 设置是否使用自定义提示语
     */
    public static void setUseCustomMessage(boolean use) {
        prefs.putBoolean(Constants.CONFIG_KEY_USE_CUSTOM_MESSAGE, use);
    }

    /**
     * 获取最终使用的提示语（带变量替换）
     * 
     * @param interval     提醒间隔
     * @param restDuration 休息时长
     */
    public static String getFinalMessage(int interval, int restDuration) {
        String message;

        // 判断是否使用自定义提示语
        if (isUseCustomMessage()) {
            String customMessage = getCustomMessage();
            if (customMessage != null && !customMessage.trim().isEmpty()) {
                message = customMessage;
            } else {
                message = Constants.DEFAULT_MESSAGE;
            }
        } else {
            message = Constants.DEFAULT_MESSAGE;
        }

        // 替换变量
        return replaceVariables(message, interval, restDuration);
    }

    /**
     * 替换提示语中的变量
     * 
     * @param message      原始提示语
     * @param interval     提醒间隔
     * @param restDuration 休息时长
     */
    public static String replaceVariables(String message, int interval, int restDuration) {
        if (message == null) {
            return "";
        }
        return message.replace("{interval}", String.valueOf(interval))
                .replace("{restDuration}", String.valueOf(restDuration));
    }

    /**
     * 获取默认提示语
     */
    public static String getDefaultMessage() {
        return Constants.DEFAULT_MESSAGE;
    }

    /**
     * 获取倒计时窗口透明度（0.0-1.0）
     */
    public static float getCountdownOpacity() {
        return prefs.getFloat(Constants.CONFIG_KEY_COUNTDOWN_OPACITY, Constants.DEFAULT_COUNTDOWN_OPACITY);
    }

    /**
     * 保存倒计时窗口透明度（0.0-1.0）
     */
    public static void setCountdownOpacity(float opacity) {
        if (opacity >= Constants.MIN_OPACITY && opacity <= Constants.MAX_OPACITY) {
            prefs.putFloat(Constants.CONFIG_KEY_COUNTDOWN_OPACITY, opacity);
        }
    }

    /**
     * 重置所有配置为默认值
     */
    public static void resetToDefaults() {
        setReminderInterval(Constants.DEFAULT_REMINDER_INTERVAL);
        setRestDuration(Constants.DEFAULT_REST_DURATION);
        setCustomMessage("");
        setUseCustomMessage(false);
        setCountdownOpacity(Constants.DEFAULT_COUNTDOWN_OPACITY);
    }
}
